package org.aliwo.method;

/**
 * @author xuyayuan
 * @data 2021年06月16日
 * 第一组常用方法
 * 一：setName，设置县城名称，使之与参数name相同
 * 二：getName，返回该县城名称
 * 三：start，使该线程开始执行，java虚拟机底层调用该线程的start0()方法
 * 四：run，调用线程对象run方法
 * 五：setPriority，更改线程的优先级
 * 六：getPriority，获取改线程的优先级
 * 七：sleep，在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
 * 七：interrupt，中断线程
 * 注意事项和细节：
 * 一：start底层会创建新的线程，调用run，run就是一个简单的方法调用，不会启动新线程。
 * 二：线程优先级的范围
 * 三：interrupt，中断线程，但并没有真正的结束线程，所以一般用于中断正在休眠线程。
 * 四：sleep，线程的静态方法，十当前线程休眠。
 */
public class ThreadMethod {
    public static void main(String[] args) throws InterruptedException {
        T t = new T();
        // 设置线程的名称
        t.setName("xuyy");
        // 设置线程优先级
        t.setPriority(Thread.MIN_PRIORITY);
        t.start();
        System.out.println(Thread.currentThread().getName() + " 线程优先级 : " +
                Thread.currentThread().getPriority());
        // 主线程打印5 个hi 然后就会中断子线程的休眠
        for (int i = 0; i < 5; i++) {
            Thread.sleep(1000);
            System.out.println("hi" + i);
        }
        // 当执行到这里，就会中断线程，提前结束t线程的休眠
        t.interrupt();
        System.out.println(t.getName() + " 线程优先级 : " + t.getPriority());
    }
}

class T extends Thread {
    @Override
    public void run() {
        while (true) {
            for (int i = 0; i < 100; i++) {
                System.out.println(Thread.currentThread().getName() + " 吃包子。。。" + i);
            }
            try {
                System.out.println(Thread.currentThread().getName() + "休眠中。。。");
                Thread.sleep(20000);
            } catch (InterruptedException e) {
                // 当该线程执行到interrupt方法时，就会catch住一个异常，可以加入自己的业务代码，提前中断休眠
                System.out.println(Thread.currentThread().getName() + "被 interrupt了");
            }
        }
    }
}

